// 版权所有2009 Go作者。保留所有权利。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

package math

// Modf返回整数和小数浮点数
// 这两个值与f的符号相同。
// 
// 特殊情况是：
// Modf（±Inf）=±Inf，NaN 
// Modf（NaN）=NaN，NaN 
func Modf(f float64) (int float64, frac float64) {
	if haveArchModf {
		return archModf(f)
	}
	return modf(f)
}

func modf(f float64) (int float64, frac float64) {
	if f < 1 {
		switch {
		case f < 0:
			int, frac = Modf(-f)
			return -int, -frac
		case f == 0:
			return f, f // 当f=-0 
		}
		return 0, f
	}

	x := Float64bits(f)
	e := uint(x>>shift)&mask - bias

	// 保留前12+e位，整数部分；清理剩下的。
	if e < 64-12 {
		x &^= 1<<(64-12-e) - 1
	}
	int = Float64frombits(x)
	frac = f - int
	return
}
